import { startsWith, trimEnd, trimStart, forOwn, replace, endsWith } from 'lodash'

/**
 * 是否绝对网址
 * @param {String} url 网址
 */
function isAbsoluteURL(url) {
	return startsWith(url, 'http://') || startsWith(url, 'https://')
}

/**
 * 构建请求地址
 * @param {String} baseURL 地址前缀
 * @param {String} url 相对地址
 */
function combineURL(baseURL, url) {
	if (isAbsoluteURL(url)) {
		return url
	}
	return trimEnd(baseURL, '/') + '/' + trimStart(url, '/')
}

/**
 * 替换请求地址中的/:参数
 * @param {String} url 请求地址
 * @param {Object} params 参数
 */
function replaceParamsInURL(url, params) {
	forOwn(params, (value, key) => {
		url = replace(url, '/:' + key, '/' + value)
	})
	return url
}
/**
 * 组装查询参数至URL
 * @param {String} url 请求地址
 * @param {Object} query 查询参数
 */
function combineQueryToURL(url, query) {
	forOwn(query, (value, key) => {
		url += (endsWith(url, '&') ? '' : '?') + key + '=' + value + '&'
	})
	return trimEnd(url, '&')
}

function bind(fn, thisArg) {
	return function wrap() {
		var args = new Array(arguments.length);
		for (var i = 0; i < args.length; i++) {
			args[i] = arguments[i];
		}
		return fn.apply(thisArg, args);
	};
};
export {
	combineURL,
	bind,
	replaceParamsInURL,
	combineQueryToURL
}